package com.imooc.pan.server.modules.file.service;

import com.imooc.pan.server.modules.file.context.*;
import com.imooc.pan.server.modules.file.entity.RPanUserFile;
import com.baomidou.mybatisplus.extension.service.IService;
import com.imooc.pan.server.modules.file.vo.*;

import java.util.List;

/**
* @author 黄怀镔
* @description 针对表【r_pan_user_file(用户文件信息表)】的数据库操作Service
* @createDate 2024-06-06 22:44:17
*/
public interface RPanUserFileService extends IService<RPanUserFile> {

    /**
     * 创建文件夹
     * @param createFolderContext
     * @return
     */
    Long createFolder(CreateFolderContext createFolderContext);

    /**
     * 获取用户根文件夹信息
     * @param userId
     * @return
     */
    RPanUserFile getUserRootFile(Long userId);

    /**
     * 用户查询文件信息
     * @param fileContext
     * @return
     */
    List<RPanUserFileVo> queryFileList(QueryFileContext fileContext);

    /**
     * 文件重命名
     * @param updateFilenameContext
     */
    void updateFilename(UpdateFilenameContext updateFilenameContext);

    /**
     * 批量删除文件
     * @param deleteFileContext
     */
    void deleteFile(DeleteFileContext deleteFileContext);

    /**
     * 文件秒传
     * @param secUploadFileContext
     * @return
     */
    boolean secUpload(SecUploadFileContext secUploadFileContext);

    /**
     * 单文件上传
     * @param fileContext
     */
    void upload(FileUploadContext fileContext);

    /**
     * 文件分片上传
     * @param fileChunkUploadContext
     * @return
     */
    FileChunkUploadVo chunkUpload(FileChunkUploadContext fileChunkUploadContext);

    /**
     * 查询用户已上传的分片列表
     * @param queryUploadChunksContext
     * @return
     */
    UploadChunksVO getUploadChunksVO(QueryUploadChunksContext queryUploadChunksContext);

    /**
     * 合并文件
     * @param context
     */
    void mergeFile(FileChunkMergeContext context);

    /**
     * 文件下载
     * @param context
     */
    void download(FileDownloadContext context);

    /**
     * 文件预览
     * @param context
     */
    void preview(FilePreviewContext context);

    /**
     * 查询用户文件夹
     * @param context
     * @return
     */
    List<FolderTreeNodeVO> queryFolderTree(QueryFolderTreeContext context);

    /**
     * 移动文件
     * @param context
     */
    void transfer(TransferFileContext context);

    /**
     * 文件复制功能
     * @param context
     */
    void copy(CopyFileContext context);

    /**
     * 文件搜素
     * @param context
     * @return
     */
    List<FileSearchResultVO> search(FileSearchContext context);

    /**
     * 查询面包屑列表
     * @param context
     * @return
     */
    List<BreadCurmbVO> getBreadcurmbs(QueryBreadCurmsContext context);

    /**
     * 递归查找文件夹所有的子文件
     * @param records
     * @return
     */
    List<RPanUserFile> findAllRecords(List<RPanUserFile> records);
}
